In [ ]:
%matplotlib inline

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

我確定好了幾個測試主題:

  1. 自動控制系統觀念
  2. 材料力學概念
  3. 程式生成(C#,Python,Matlab)
  4. 程式除錯(C#,Python,Matlab)

每個關卡都有分基礎題、進階題、應用題三大部分

以下三種LLM為本次測驗的參賽者:

  1. ChatGPT (GPT-4o mini)
  2. Claude(Claude 3.7 Sonnet)
  3. Gemini(Google Gemini 2.0 Flash)

以下四點為評估模型表現的重點

  • 準確性:模型的回答是否正確?是否有錯誤的知識?
  • 完整度:回答是否詳細,是否能涵蓋關鍵概念?
  • 表達能力:模型的回答是否清晰易懂?
  • 創意性:模型是否能提供有趣的觀點或應用?

為確保測試公平性,一律使用新的對話測試

並一律使用以下格式貼 Prompt(為避免報告太長,回答一律盡量簡單) :

請用繁體中文簡短回答以下問題

「(在此貼上問題)」

==========================測試開始==========================¶

測試關卡(一):自動控制系統觀念¶

基礎題:¶

  • 「請解釋開迴路與閉迴路控制的區別,並舉例說明。」
  • 「什麼是狀態空間表示法?它與傳遞函數有何不同?」

進階題:¶

  • 「請推導 PID 控制器的數學模型,並說明如何調整參數以改善超調量。」

應用題:¶

  • 「如果要設計一個自動調整車速的控制系統,應該如何選擇適當的控制策略?」

第一位參賽者:ChatGPT¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:4/5
  • 表達能力:5/5
  • 創意性:4/5

第二位參賽者:Claude¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:5/5
  • 表達能力:5/5
  • 創意性:5/5

第三位參賽者:Gemini¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:3/5
  • 表達能力:4/5
  • 創意性:3/5

測試關卡(二):材料力學概念¶

基礎題:¶

  • 「請解釋應力(Stress)與應變(Strain)的概念,並提供示例。」
  • 「什麼是胡克定律?請寫出數學表達式並說明變數的意義。」

進階題:¶

  • 「請解釋剪應力與彎矩之間的關係,並舉例說明其應用。」

應用題:¶

  • 「設計一個支撐結構,使其在最大負載下的變形量最小,你會如何選擇材料和形狀?」

第一位參賽者:ChatGPT¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:4/5
  • 表達能力:4/5
  • 創意性:4/5

第二位參賽者:Claude¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:5/5
  • 表達能力:4/5
  • 創意性:5/5

第三位參賽者:Gemini¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

總評價:¶

  • 內容準確性:4/5
  • 內容完整度:3/5
  • 表達能力:5/5
  • 創意性:5/5

測試關卡(三):程式生成(C#、Python、Matlab)¶

基礎題:¶

  • 「請撰寫一個 Python 程式來計算費氏數列(Fibonacci)。」
  • 「請用 Matlab 繪製函數 y = sin(x) 的曲線。」

進階題:¶

  • 「請用 Matlab 設計一個控制系統模擬,並分析其步階響應(step response)。」

應用題:¶

  • 「請用 Python 設計一個簡單的 GUI 應用程式,讓使用者輸入數據並計算 BMI。」

第一位參賽者:ChatGPT¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
    return a

# 範例使用
n = 10
print(f"第 {n} 項費氏數列為: {fibonacci(n)}")
第 10 項費氏數列為: 55

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

image.png

總評價:¶

  • 內容準確性:4/5
  • 內容完整度:3/5
  • 表達能力:5/5
  • 創意性:4/5

第二位參賽者:Claude¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
def fibonacci(n):
    if n <= 0:
        return "請輸入正整數"
    elif n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        a, b = 0, 1
        for _ in range(3, n+1):
            a, b = b, a + b
        return b

# 測試程式
n = 10
print(f"費氏數列第 {n} 項為: {fibonacci(n)}")
費氏數列第 10 項為: 34

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:5/5
  • 表達能力:5/5
  • 創意性:5/5

第三位參賽者:Gemini¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
def fibonacci(n):
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    else:
        list_fib = [0, 1]
        while len(list_fib) < n:
            next_fib = list_fib[-1] + list_fib[-2]
            list_fib.append(next_fib)
        return list_fib

# 範例:計算前 10 個費氏數列
print(fibonacci(10))
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

image.png

image.png

進階題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

應用題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

image.png

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:4/5
  • 表達能力:5/5
  • 創意性:4/5

測試關卡(四):程式除錯(C#、Python、Matlab)¶

基礎題:¶

  • 這段 C# 程式碼有錯誤,請修正:
    int x = null;
    Console.WriteLine(x);
  • 這段 Python 程式碼有錯誤,請找出並修正:
    num = "10"
    result = num + 5
    print(result)


進階題:¶

  • 這段 Python 程式碼會造成記憶體洩漏(memory leak),請找出問題並修正:
    lst = []
    while True:
        lst.append("leak")

應用題:¶

  • 這段 Matlab 程式碼運行效率低,請優化:
A = rand(20000, 20000);
B = zeros(20000, 1);
for i = 1:20000
    B(i) = sum(A(i, :));
end

第一位參賽者:ChatGPT¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

image.png

In [ ]:
num = "10"
result = int(num) + 5
print(result)
15

進階題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
#原本的錯誤程式碼,會導致記憶體用盡的錯誤

lst = []
while True:
    lst.append("leak")
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-37-d3d8dad87ff3> in <cell line: 0>()
      2 
      3 lst = []
----> 4 while True:
      5     lst.append("leak")

KeyboardInterrupt: 
In [ ]:
#修正範例1
lst = []
for _ in range(1000):  # 限制迴圈次數
    lst.append("leak")
In [ ]:
#修正範例2

def leak_generator():
    while True:
        yield "leak"

gen = leak_generator()
for _ in range(1000):  # 控制迴圈次數
    next(gen)

應用題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

上圖為執行原本的程式碼,花的時間為8.842秒

image.png

上圖為執行改善的程式碼,花的時間為3.255秒

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:3/5
  • 表達能力:5/5
  • 創意性:4/5

第二位參賽者:Claude¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

(第一個修正程式碼和ChatGPT相同,所以就只有附上第二個修正程式碼)

image.png

image.png

In [ ]:
num = "10"
result = int(num) + 5
print(result)

進階題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
#Claude 修正的程式碼-1

lst = []
max_size = 1000  # 設定一個最大大小
while len(lst) < max_size:
    lst.append("leak")
In [ ]:
#Claude 修正的程式碼-2
lst = []
while True:
    lst.append("leak")
    if len(lst) >= 1000:
        lst = []  # 清空列表,避免記憶體洩漏

應用題回答內容截圖,以及輸出內容截圖¶

image.png

(和ChatGPT修正的程式碼相同)

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:5/5
  • 表達能力:5/5
  • 創意性:5/5

第三位參賽者:Gemini¶

基礎題回答內容截圖,以及輸出內容截圖¶

image.png

image.png

In [ ]:
num = "10"
result = int(num) + 5
print(result)
In [ ]:
num = "10"
result = num + str(5)
print(result)

進階題回答內容截圖,以及輸出內容截圖¶

image.png

In [ ]:
#第一個修正方案:限制迴圈次數

lst = []
count = 0
while count < 1000:  # 例如,限制迴圈 1000 次
    lst.append("leak")
    count += 1
In [ ]:
#第二個修正方案:設定list的最大長度


lst = []
max_length = 1000  # 設定最大長度
while True:
    lst.append("leak")
    if len(lst) > max_length:
        del lst[0]  # 刪除第一個元素

應用題回答內容截圖,以及輸出內容截圖¶

image.png

(和ChatGPT與Claude修正的程式碼相同)

總評價:¶

  • 內容準確性:5/5
  • 內容完整度:4/5
  • 表達能力:4/5
  • 創意性:4/5

==========================評估模型表現==========================¶

使用ChatGPT依照評分結果畫出長條圖

image.png

image.png

In [28]:
plt.rcParams['font.family'] = 'DejaVu Sans'

categories = ["Accuracy", "Completeness", "Expressive Ability", "Creativity"]
models = ["ChatGPT-4o", "Claude 3.7", "Gemini 2.0"]
tests = ["Automatic Control", "Material Mechanics", "Program Generation", "Program Debugging"]

scores = {
    "ChatGPT-4o": [
        [5, 4, 5, 4],  # 自動控制系統觀念
        [5, 4, 4, 4],  # 材料力學概念
        [4, 3, 5, 4],  # 程式生成
        [5, 3, 5, 4],  # 程式除錯
    ],
    "Claude 3.7": [
        [5, 5, 5, 5],
        [5, 5, 4, 5],
        [5, 5, 5, 5],
        [5, 5, 5, 5],
    ],
    "Gemini 2.0": [
        [5, 3, 4, 3],
        [4, 3, 5, 5],
        [5, 4, 5, 4],
        [5, 4, 4, 4],
    ],
}

colors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728"]

fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle("LLM Test Scoring Results", fontsize=16)

for i, test in enumerate(tests):
    ax = axes[i // 2, i % 2]
    x = np.arange(len(models))
    width = 0.2

    for j, category in enumerate(categories):
        scores_for_category = [scores[model][i][j] for model in models]
        ax.bar(x + j * width - 0.3, scores_for_category, width, label=category, color=colors[j])

    ax.set_title(test, fontsize=14)
    ax.set_xticks(x)
    ax.set_xticklabels(models, fontsize=12)
    ax.set_ylim(0, 5.5)
    ax.legend()

plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
No description has been provided for this image

透過圖表分析每個LLM的優劣勢¶

LLM 最佳領域 優勢 缺點
Claude 3.7 全能型 AI,擅長所有領域 高準確度、完整度強、表達能力優秀、創意高 可能過於詳盡,回應過長
ChatGPT-4o 適合需要清楚解釋的程式與工程概念 高準確度、表達能力好 完整度稍低,創意不及 Claude
Gemini 2.0 程式生成與材料力學表達能力佳 表達能力與創意良好,程式相關能力穩定 完整度較低,部分領域準確性稍低

==========================總結==========================¶

  • Claude 3.7:需要最完整、最精確的答案(適合技術研究、學術應用)
  • ChatGPT-4o:獲得清楚的解釋,且不希望回答過長(適合教學與學習)
  • Gemini 2.0:關注程式開發,並希望獲得不同的創意思路

喜歡哪一個?¶

經過一段時間的使用及測試,我個人最喜歡 Claude,特別是在寫程式時。Claude 的強大之處在於,它不僅能夠準確地生成程式碼,還經常會額外提供一些意想不到的實用功能,讓開發變得更加高效。而且,它的錯誤率極低,這讓我在編寫與測試程式時更加放心。